package cl.uchile.in77j;


// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.01C6117C-BC2A-0722-5838-D7E11B7B38D8]
// </editor-fold> 
/**
 * Clase correspondiente al receptor de Monedas
 * @author eferro, HerrGehirn
 * responsable Grupo C
 */
public class Monedero {

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.5EFDBC8F-58AF-CB3A-1BD4-5E7A78292FE6]
    // </editor-fold> 
    private int moneda;
    private boolean flag;
    private int vueltoCliente;
    private int moneda500 = 0;  // cantidad de moneda de 500 para el vuelto
    private int moneda50 = 0;  // cantidad de moneda de 50 para el vuelto
    private int moneda100 = 0;  // cantidad de moneda de 100 para el vuelto
    private Conexion cxn;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.77E613F2-0DAD-A793-6DFC-098846E81D99]
    // </editor-fold> 
    /**
     *
     */
    private Monedero() {
        this.cxn = new Conexion();
        moneda=0;
        flag = false;
        vueltoCliente = 0;

    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.E1B80095-CC9F-E837-49EE-3DF19C3FC948]
    // </editor-fold> 
    /** Esta Clase se encarga de tomar el vuelto que debe entregar y conectarse
     * con la BDD de las monedas disponibles
     *
     * @param vuelto
     * @return
     */
    public boolean entregarVuelto(int vuelto) {
        cxn.log("entregarVuelto");
        vueltoCliente = this.seleccionarMonedas(vuelto);

        /* liberar fisicamente las monedas. */

        return true;
        
    }


    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.8BF8719B-6C4D-21BE-C3EA-02837771EF62]
    // </editor-fold> 
    /**
     *
     */
    public void entregarMoneda() {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.A2317202-5736-4E29-5119-9B3E0C749C6A]
    // </editor-fold> 
    /**
     *
     * @param denominacion
     */
    public void recibirMoneda(int denominacion) {
        cxn.log("recibirMoneda");
        if (this.validarMoneda(denominacion)){
            moneda = moneda + denominacion;
        }
    }
    
      // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.F1D51EAA-B462-5A7A-6670-B7A175ACAC44]
    // </editor-fold> 
    /** Este metodo se encarga de consultar que monedas se encuentran disponibles para entregar el vuelto
     *
     * @param vuelto : total del vuelto que debe ser entregado al cliente
     * @return monto devuelto
     */
    private int seleccionarMonedas(int vuelto) {
        cxn.log("seleccionarMonedas");
        int resto = vuelto;
        moneda500 = (int)(vuelto / 500);
        resto = resto - (moneda500 * 500);
        moneda100 = (int)(vuelto / 100);
        resto = resto - (moneda500 * 100);
        moneda50 = (int)(vuelto / 50);
        resto = resto - (moneda500 * 50);
                
        return vuelto;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.16BAE24B-267C-F521-1EDB-DA58DF5476BB]
    // </editor-fold> 
    /**
     *
     * @return
     */
    public int montoDisponible() {
        cxn.log("montoDisponible");
        return moneda;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.65D1F847-D660-B1E4-283E-1863C38925BB]
    // </editor-fold> 
    /**
     *
     * @param val
     */
    public void getMoneda(int val) {
        this.moneda = val;
    }

    /**
     *
     * @param moneda : corresponde al valor de la moneda que es introducida por el cliente.
     * @return : verdadero se la moneda el valida, falso en caso contrario. Solo acepta monedas de: 50, 100 y 500.
     */
    private boolean validarMoneda (int moneda) {
        cxn.log("validarMoneda");

        double validacion = Math.random();
        // se define un 25% de error al validar.
        if (validacion >= 0.75)
            flag = false;
        else {
            if (moneda == 50) {
                flag = true;
            }
            if (moneda == 100) {
                flag = true;
            }
            if (moneda == 500) {
                flag = true;
            }
            else
            { flag = false;}

        }
        
        return flag;
    }
}

